package com.iris.jvmtest.compile;

import java.util.List;

/**
 * @date : 2017年10月24日 下午3:54:52
 * @author : Iris.Xiao
 * @version : 1.0
 * @description : method 方法在1.6编译下是可以编译的.........很神奇.....1.6之后就不可以编译通过了
 * 之所以这次能编译和执行成功，
是因为两个method（）方法加入了不同的返回值后才能共存在一个Class文件之中。第6章介
绍Class文件方法表（method_info）的数据结构时曾经提到过，方法重载要求方法具备不同的
特征签名，返回值并不包含在方法的特征签名之中，所以返回值不参与重载选择，但是在
Class文件格式之中，只要描述符不是完全一致的两个方法就可以共存。也就是说，两个方法
如果有相同的名称和特征签名，但返回值不同，那它们也是可以合法地共存于一个Class文件
中的。
*/
public class CompileTest {

    public static String method(List<String> list){
    	return "";
    }

    public static int method1(List<Integer> list){
    	return 1; 
    }
    
//    public void test(){
//    	List list = new ArrayList();
//    	this.method(list);
//    }

	public static void main(String[] args) {
//		test11();
		Integer a = 1;
		Integer b = 2;
		Integer c = 3;
		Integer d = 3;
		Integer e = 321;
		Integer f = 321;
		int f1 = 321;
		Long g = 3L;
		Long h = 2L;
		System.out.println(c==d);
		System.out.println(f==f1);
		System.out.println(c==d);
		System.out.println(e==f);
		System.out.println(c==(a+b));
		System.out.println(c.equals(a+b));
		System.out.println(g==(a+b));
		System.out.println(g.equals(a+b));
		System.out.println(g.equals(a+h));
	}
/**
 * 
 * @date : 2017年10月24日 下午5:04:43
 * @author : Iris.Xiao
 * @description :
 * 鉴于
包装类的“==”运算在不遇到算术运算的情况下不会自动拆箱，以及它们equals（）方法不处
理数据转型的关系，
 */
	public static void test11(){
		Integer a = 1;
		Integer b = 2;
		Integer c = 3;
		Integer d = 3;
		Integer e = 321;
		Integer f = 321;
		  
		Long g = 3L;
		Long h = 2L;
		  
		// 会自动拆箱（会调用intValue方法）
		System.out.println(c==d);
		// 会自动拆箱后再自动装箱
		System.out.println(e==f);
		// 虽然“==”比较的是引用的是否是同一对象，但这里有算术运算，如果该引用为包装器类型则会导致自动拆箱
		System.out.println(c==(a+b));
		// equals 比较的是引用的对象的内容（值）是否相等，但这里有算术运算，如果该引用为包装器类型则会导
		 // 致自动拆箱，再自动装箱
		// a+b触发自动拆箱得到值后，再自动装箱与c比较
		System.out.println(c.equals(a+b));
		// 首先a+b触发自动拆箱后值为int型，所以比较的是值是否相等
		System.out.println(g==(a+b));
		// 首先a+b触发自动拆箱后值为int型，自动装箱后为Integer型，然后g为Long型
		System.out.println(g.equals(a+b));
		// 首先a+h触发自动拆箱后值为long型，因为int型的a会自动转型为long型的g然后自动装箱后为Long型，
		 // 而g也为Long型
		System.out.println(g.equals(a+h));
	}
}
